import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score
plt.rcParams['font.sans-serif'] = ['STSong']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
# 导入时间序列数据，假设数据包含日期和销售量
# 这里使用一个示例数据集
data = pd.read_excel(r'最终之战品类总销量美化2023年.xlsx')
data['时间'] = pd.to_datetime(data['时间'])
data.set_index('时间', inplace=True)


# # 绘制原始时间序列图
# plt.figure(figsize=(12, 6))
# plt.plot(data['水生根茎类'])
# plt.xlabel('时间')
# plt.ylabel('销售量')
# plt.title('销售量时间序列')
# plt.show()

# 拟合ARIMA模型
# ARIMA(p, d, q)中的参数需要根据实际情况调整
# 这里仅作为示例，需要根据实际数据来确定参数
# model = sm.tsa.ARIMA(data['茄类'], order=(7, 1, 2))
# model = sm.tsa.ARIMA(data['茄类'], order=(7, 1, 2))
model = sm.tsa.ARIMA(data['茄类'], order=(4, 0, 2))
# model = sm.tsa.ARIMA(data['水生根茎类'], order=(10, 0, 2))
results = model.fit()

# 打印模型概要信息
print(results.summary())

# 绘制模型拟合的预测结果
plt.figure(figsize=(12, 6))
plt.plot(data['水生根茎类'], label='原始数据')
plt.plot(results.fittedvalues, color='red', label='拟合结果')
plt.xlabel('时间')
plt.ylabel('销售量')
plt.legend(loc='upper left')
plt.title('ARIMA模型拟合结果')
plt.show()

# 进行未来的销售量预测
forecast_steps = 7  # 预测未来12个时间步长
forecast = results.get_forecast(steps=forecast_steps)
print("_____________________")
print(r2_score(data['茄类'],results.fittedvalues))
print("_____________________")
# 获取预测值和置信区间
forecast_mean = forecast.predicted_mean
forecast_conf_int = forecast.conf_int()

# 绘制未来销售量的预测结果和置信区间
plt.figure(figsize=(12, 6))
plt.plot(data['水生根茎类'], label='原始数据')
plt.plot(forecast_mean, color='red', label='预测结果')
plt.fill_between(forecast_conf_int.index, forecast_conf_int.iloc[:, 0], forecast_conf_int.iloc[:, 1], color='pink', alpha=0.3, label='95% 置信区间')
plt.xlabel('时间')
plt.ylabel('销售量')
plt.legend(loc='upper left')
plt.title('未来销售量预测')
plt.show()
